DECLARE @FechaDesde DateTime   = [Fecha Desde, DateTime,01/01/1990]
DECLARE @FechaHasta DateTime   = [Fecha Hasta, DateTime,01/01/2090]
DECLARE @Proveedor Varchar(15) = [Proveedor, CUADRADO(15),,(PROVEED,CODPRO)]
DECLARE @Almacen Varchar(8)    = [Almacen, CUADRADO(8),,(ALMACEN,CODALM)]

DECLARE @ArtGen Varchar(15)
SET @ArtGen = (SELECT TOP 1 CODARTBLAN FROM DATOSCONFIG)
DECLARE @NomProveed VARCHAR(100)
SET @NomProveed = (SELECT NomPro FROM Proveed WHERE RTRIM(LTRIM(CodPro)) = RTRIM(LTRIM(@Proveedor)))
DECLARE @NomAlmacen VARCHAR(50)
SET @NomAlmacen = (SELECT DescAlm FROM Almacen WHERE RTRIM(LTRIM(Codalm)) = RTRIM(LTRIM(@Almacen)))

SELECT (FORMAT(@FechaDesde,'dd/MM/yyyy ') + ' a ' + FORMAT(@FechaHasta,'dd/MM/yyyy ')) Pedriodo,
        COALESCE(@NomProveed,'<VARIOS>') "Comprado a", 
        COALESCE(@NomAlmacen,'<TODOS>') Almacen,
        ARTICULO.*
FROM
(
  SELECT COALESCE(P.NOMPRO,'<SIN PROVEEDOR>') "Prov.Preferente", A.CODART, A.DESCART,
         ((SELECT COALESCE(SUM(LV.UNIDADES),0) FROM LINEFACT LV
            WHERE LV.Fecha >= @FechaDesde AND LV.Fecha <= @FechaHasta
              AND LV.CODART = A.CODART
              AND LV.ComVen ='V'
          ) +
          (SELECT COALESCE(SUM(LA.UNIDADES),0) FROM LineAlba LA
            WHERE LA.Fecha >= @FechaDesde AND LA.Fecha <= @FechaHasta
              AND LA.CODART = A.CODART
              AND LA.ComVen ='V'
              AND LA.Situacion ='A'
         )) Ventas,
         ((SELECT COALESCE(SUM(LV.BASEMONEDA),0) FROM LINEFACT LV
           WHERE LV.Fecha >= @FechaDesde AND LV.Fecha <= @FechaHasta
             AND LV.CODART = A.CODART
             AND LV.ComVen ='V'
          ) +
          (SELECT COALESCE(SUM(LA.BASEMONEDA),0) FROM LineAlba LA
            WHERE LA.Fecha >= @FechaDesde AND LA.Fecha <= @FechaHasta
              AND LA.CODART = A.CODART
              AND LA.ComVen ='V'
              AND LA.Situacion ='A'
         )) "Total Venta",
         ((SELECT COALESCE(SUM(LFC.Unidades),0) FROM LineFact LFC
             LEFT JOIN Cabefacc CAB WITH(NOLOCK) ON CAB.IdFacc = LFC.IdFacc AND LFC.EsComponente = 'F'
            WHERE CAB.Fecha >= @FechaDesde AND CAB.Fecha <= @FechaHasta
              AND (@Proveedor='' OR RTRIM(LTRIM(CAB.CodPro))=RTRIM(LTRIM(@Proveedor)))
              AND (@Almacen='' OR RTRIM(LTRIM(CAB.CodAlm))=RTRIM(LTRIM(@Almacen)))
              AND LFC.CODART = A.CODART
          ) +
          (SELECT COALESCE(SUM(LAC.Unidades),0) FROM LineAlba LAC
             LEFT JOIN CabeAlbc CAB WITH(NOLOCK) ON CAB.IdAlbc = LAC.IdAlbc AND LAC.EsComponente = 'F'
            WHERE CAB.Fecha >= @FechaDesde AND CAB.Fecha <= @FechaHasta
              AND (@Proveedor='' OR RTRIM(LTRIM(CAB.CodPro))=RTRIM(LTRIM(@Proveedor)))
              AND (@Almacen='' OR RTRIM(LTRIM(CAB.CodAlm))=RTRIM(LTRIM(@Almacen)))
              AND LAC.CodArt = A.CODART
              AND CAB.Situacion='A' AND CAB.Facturable='T'
          )) "Compras Proveedor",
         ((SELECT COALESCE(SUM(LFC.BaseMoneda),0) FROM LineFact LFC
             LEFT JOIN Cabefacc CAB WITH(NOLOCK) ON CAB.IdFacc = LFC.IdFacc AND LFC.EsComponente = 'F'
            WHERE CAB.Fecha >= @FechaDesde AND CAB.Fecha <= @FechaHasta
              AND (@Proveedor='' OR RTRIM(LTRIM(CAB.CodPro))=RTRIM(LTRIM(@Proveedor)))
              AND (@Almacen='' OR RTRIM(LTRIM(CAB.CodAlm))=RTRIM(LTRIM(@Almacen)))
              AND LFC.CODART = A.CODART
          ) +
          (SELECT COALESCE(SUM(LAC.BaseMoneda),0) FROM LineAlba LAC
             LEFT JOIN CabeAlbc CAB WITH(NOLOCK) ON CAB.IdAlbc = LAC.IdAlbc AND LAC.EsComponente = 'F'
            WHERE CAB.Fecha >= @FechaDesde AND CAB.Fecha <= @FechaHasta
              AND (@Proveedor='' OR RTRIM(LTRIM(CAB.CodPro))=RTRIM(LTRIM(@Proveedor)))
              AND (@Almacen='' OR RTRIM(LTRIM(CAB.CodAlm))=RTRIM(LTRIM(@Almacen)))
              AND LAC.CodArt = A.CODART
              AND CAB.Situacion='A' AND CAB.Facturable='T'
          )) "Total Proveedor",
         ((SELECT COALESCE(SUM(LFC.Unidades),0) FROM LineFact LFC
           WHERE LFC.Fecha >= @FechaDesde AND LFC.Fecha <= @FechaHasta
             AND LFC.CodArt = A.CodArt
             AND LFC.ComVen ='C'
          ) +
          (SELECT COALESCE(SUM(LAC.Unidades),0) FROM LineAlba LAC
            WHERE LAC.Fecha >= @FechaDesde AND LAC.Fecha <= @FechaHasta
              AND LAC.CodArt = A.CODART
              AND LAC.Situacion='A'
         )) "Compras Totales",
        (SELECT SUM(Coalesce(Unidades,0)) FROM StockAlm WITH(NOLOCK)
          WHERE StockAlm.Codart = A.Codart
            AND (@Almacen='' OR RTRIM(LTRIM(StockAlm.CodAlm))=RTRIM(LTRIM(@Almacen)))
        ) Stock,
        (SELECT SUM(Coalesce(Unidades,0)) FROM StockAlm WITH(NOLOCK)
          WHERE StockAlm.Codart = A.Codart
        ) "Stock Total"
  FROM ARTICULO A WITH (NOLOCK)
  LEFT JOIN Proveed P WITH(NOLOCK) ON P.CodPro = A.CodPro
  WHERE A.CODART <> @Artgen
    AND ((@Proveedor='' OR RTRIM(LTRIM(A.CodPro))=RTRIM(LTRIM(@Proveedor)))
     OR ( RTRIM(LTRIM(@Proveedor)) IN (SELECT DISTINCT RTRIM(LTRIM(CAB2.CodPro)) FROM LineFact LFC2
                                         LEFT JOIN Cabefacc CAB2 WITH(NOLOCK) ON CAB2.IdFacc = LFC2.IdFacc AND LFC2.EsComponente = 'F'
                                        WHERE LFC2.CodArt = A.CODART
                                       UNION ALL
                                       SELECT DISTINCT RTRIM(LTRIM(CAB3.CodPro)) FROM LineAlba LAC3
                                         LEFT JOIN CabeAlbc CAB3 WITH(NOLOCK) ON CAB3.IdAlbc = LAC3.IdAlbc AND LAC3.EsComponente = 'F'
                                        WHERE LAC3.CodArt = A.CodArt
                                          AND LAC3.Situacion='A' 
                                       )))
) AS ARTICULO
  WHERE ( [DevolverRegistros, SysName, 1 = 1])
    AND ( [CondicionTabla, SysName, 1 = 1])
    AND ( [Filtro, SysName, 1 = 1])
    AND ( ( ARTICULO.Ventas + Articulo."Compras Proveedor") <> 0 )
    AND ( ( '[TextoBusqueda, SysName, '']' = '') OR
          ( ARTICULO.CODART LIKE '%[TextoBusqueda, SysName, '']%') OR
          ( @NomProveed LIKE '%[TextoBusqueda, SysName, '']%') OR
          ( ARTICULO."Prov.Preferente" LIKE '%[TextoBusqueda, SysName, '']%') OR
          ( ARTICULO.DESCART LIKE '%[TextoBusqueda, SysName, '']%'))
ORDER BY ARTICULO.VENTAS DESC